// tab-bar.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    // 当前选中的标签页
    current: {
      type: Number,
      value: 0
    },
    // 是否显示导航栏
    visible: {
      type: Boolean,
      value: false
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    currentTab: 0,
    isVisible: false,
    // 导航标签数据 - 5个导航项，使用图片图标
    tabList: [
      {
        id: 0,
        text: '首页',
        icon: '/images/动态.png',
        iconActive: '/images/动态.png',
        url: '/pages/index/index'
      },
      {
        id: 1,
        text: '时光',
        icon: '/images/album.png',
        iconActive: '/images/album.png',
        url: '/pages/timeline/timeline'
      },
      {
        id: 2,
        text: '地图',
        icon: '/images/road-map-line.png',
        iconActive: '/images/road-map-line.png',
        url: '/pages/routes/routes'
      },
      {
        id: 3,
        text: '服务',
        icon: '/images/服务.png',
        iconActive: '/images/服务.png',
        url: '/pages/service/service'
      },
      {
        id: 4,
        text: '我的',
        icon: '/images/我的.png',
        iconActive: '/images/我的.png',
        url: '/pages/my/my'
      }
    ]
  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 根据当前路由更新选中标签
    updateCurrentByRoute(routePath) {
      try {
        const normalized = (routePath || '').replace(/^\/*/, '') // 去掉开头的 '/'
        const list = this.data.tabList || []
        const found = list.findIndex(item => (item.url || '').replace(/^\/*/, '') === normalized)
        const targetIndex = found >= 0 ? found : 0
        if (this.data.currentTab !== targetIndex) {
          this.setData({ currentTab: targetIndex })
        }
      } catch (err) {
        // 兜底：回到首页
        if (this.data.currentTab !== 0) {
          this.setData({ currentTab: 0 })
        }
      }
    },
    // 标签页点击事件
    onTabTap(e) {
      const { id } = e.currentTarget.dataset
      const tabItem = this.data.tabList[id]
      
      if (tabItem) {
        // 更新当前选中的标签页
        this.setData({
          currentTab: id
        })
        if(tabItem.url=='/pages/index/index'){
          return
        }
        // 触发父组件事件
        this.triggerEvent('tabchange', {
          id: id,
          text: tabItem.text,
          url: tabItem.url
        })
        
        // 页面跳转
        if (tabItem.url) {
          wx.switchTab({
            url: tabItem.url,
            fail: () => {
              // 如果switchTab失败，尝试navigateTo
              wx.navigateTo({
                url: tabItem.url,
                fail: (err) => {
                  console.error('页面跳转失败:', err)
                  wx.showToast({
                    title: '页面跳转失败',
                    icon: 'none'
                  })
                }
              })
            }
          })
        }
      }
    },

    // 设置当前选中的标签页（供父组件调用）
    setCurrentTab(id) {
      this.setData({
        currentTab: id
      })
    },

    // 显示导航栏
    show() {
      this.setData({
        isVisible: true
      })
    },

    // 隐藏导航栏
    hide() {
      this.setData({
        isVisible: false
      })
    },

    // 切换导航栏显示状态
    toggle() {
      this.setData({
        isVisible: !this.data.isVisible
      })
    }
  },

  /**
   * 组件生命周期
   */
  lifetimes: {
    attached() {
      // 组件加载时设置当前标签页
      this.setData({
        currentTab: this.properties.current,
        isVisible: this.properties.visible
      })
    }
  },

  // 监听页面生命周期：当页面显示时，根据当前路由自动切换选中标签
  pageLifetimes: {
    show() {
      const pages = getCurrentPages()
      const currentPage = pages[pages.length - 1]
      const routePath = currentPage && currentPage.route
      this.updateCurrentByRoute(routePath)
    }
  },

  /**
   * 监听属性变化
   */
  observers: {
    'current': function(newVal) {
      this.setData({
        currentTab: newVal
      })
    },
    'visible': function(newVal) {
      this.setData({
        isVisible: newVal
      })
    }
  }
}) 